package cn.bctools.mail.utils;

/**
 * @author: Mat
 * @project: jvs-mailbox
 * @package: cn.bctools.auth.utils
 * @date: 2025-06-24 00:00:55
 * @file: UserCurrentUtils
 */

import cn.bctools.common.entity.dto.UserDto;
import cn.bctools.common.exception.NotLoginException;
import cn.bctools.mail.entity.JamesUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;


import java.util.List;

/**
 * 获取当前用户
 *
 * @author
 */
@SuppressWarnings({"rawtypes"})
@Slf4j
public class UserCurrentUtils {

    public static final String USER = "user";
    public static final String UN_LOGIN = "anonymousUser";

    /**
     * 通过上下文获取用户信息
     *
     * @return 用户信息
     */
    public synchronized static UserDto init() {
        UserDto userDto = null;
        UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
        if(usernamePasswordAuthenticationToken == null){
            throw new NotLoginException("用户未登录");
        }else{
            userDto = (UserDto) usernamePasswordAuthenticationToken.getPrincipal();
            if(userDto == null){
                throw new NotLoginException("用户未登录");
            }
        }

        return userDto;
    }

    /**
     * 获取当前登录用户,由于不是使用的Tomcat，所以每次通过请求头进行获取即可
     *
     * @return 用户信息
     */
    public static UserDto getCurrentUser() {
        return init();
    }

    /**
     * 获取当前登录用户, 未登录时返回null
     *
     * @return 用户信息
     */
    public static UserDto getNullableUser() {
        try {
            return getCurrentUser();
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 获取用户真名
     *
     * @return 用户真名
     */
    public static String getRealName() {
        return getCurrentUser().getRealName();
    }


    public static String getConfigId() {
        return getCurrentUser().getConfigId();
    }

    /**
     * 获取登录名
     *
     * @return 登录名
     */
    public static String getAccountName() {
        return getCurrentUser().getAccountName();
    }


    /**
     * 获取用户所在部门ID
     *
     * @return 部门ID
     */
    public static String getDeptId() {
        return getCurrentUser().getDeptId();
    }

    /**
     * 获取用户所在部门名称
     *
     * @return 部门名称
     */
    public static String getDeptName() {
        return getCurrentUser().getDeptName();
    }

    /**
     * 获取用户ID，先通过请求头解析用户对象，然后拿用户对象获取用户ID值
     *
     * @return java.lang.Integer
     **/
    public static String getUserId() {
        return getCurrentUser().getId();
    }

    /**
     * 获取当前用户账号等级
     *
     * @return 账号等级
     */
    public static String getLevel() {
        return getCurrentUser().getLevel();
    }

}